package com.github.bitsapling.sapling.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>
 * 系统用户信息表
 * </p>
 *
 */
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 自增主键ID，唯一标识每个用户
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户注册邮箱，需唯一且不可重复
     */
    private String email;

    /**
     * 用户密码（加密存储）
     */
    private String password;

    /**
     * 用户名，需唯一且不可重复
     */
    private String username;

    /**
     * 用户访问密钥，用于API等场景的身份验证
     */
    private String passkey;

    /**
     * 用户账户创建时间
     */
    private LocalDateTime createTime;

    /**
     * 用户头像URL
     */
    private String avatar;

    /**
     * 用户自定义头衔/称号
     */
    private String customTitle;

    /**
     * 用户签名信息
     */
    private String signature;

    /**
     * 用户界面语言偏好
     */
    private String language;

    /**
     * 下载带宽限制（如"10MB/s"）
     */
    private String downloadBandwidth;

    /**
     * 上传带宽限制（如"5MB/s"）
     */
    private String uploadBandwidth;

    /**
     * 用户累计下载量（字节）
     */
    private Long downloaded;

    /**
     * 用户累计上传量（字节）
     */
    private Long uploaded;

    /**
     * 用户实际下载量（排除重复下载等，字节）
     */
    private Long realDownloaded;

    /**
     * 用户实际上传量（排除重复上传等，字节）
     */
    private Long realUploaded;

    /**
     * 用户使用的互联网服务提供商
     */
    private String isp;

    /**
     * 用户声望值/积分（小数点后两位）
     */
    private BigDecimal karma;

    /**
     * 用户可发出的邀请名额数量
     */
    private Integer inviteSlot;

    /**
     * 用户累计做种时间（秒）
     */
    private Long seedingTime;

    /**
     * 用户个人访问令牌（用于API等场景）
     */
    private String personalAccessToken;

    /**
     * 用户隐私级别（LOW/MEDIUM/HIGH）
     */
    private String privacyLevel;

    /**
     * 用户组id
     */
    private Long groupId;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPasskey() {
        return passkey;
    }

    public void setPasskey(String passkey) {
        this.passkey = passkey;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public String getCustomTitle() {
        return customTitle;
    }

    public void setCustomTitle(String customTitle) {
        this.customTitle = customTitle;
    }

    public String getSignature() {
        return signature;
    }

    public void setSignature(String signature) {
        this.signature = signature;
    }

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }

    public String getDownloadBandwidth() {
        return downloadBandwidth;
    }

    public void setDownloadBandwidth(String downloadBandwidth) {
        this.downloadBandwidth = downloadBandwidth;
    }

    public String getUploadBandwidth() {
        return uploadBandwidth;
    }

    public void setUploadBandwidth(String uploadBandwidth) {
        this.uploadBandwidth = uploadBandwidth;
    }

    public Long getDownloaded() {
        return downloaded;
    }

    public void setDownloaded(Long downloaded) {
        this.downloaded = downloaded;
    }

    public Long getUploaded() {
        return uploaded;
    }

    public void setUploaded(Long uploaded) {
        this.uploaded = uploaded;
    }

    public Long getRealDownloaded() {
        return realDownloaded;
    }

    public void setRealDownloaded(Long realDownloaded) {
        this.realDownloaded = realDownloaded;
    }

    public Long getRealUploaded() {
        return realUploaded;
    }

    public void setRealUploaded(Long realUploaded) {
        this.realUploaded = realUploaded;
    }

    public String getIsp() {
        return isp;
    }

    public void setIsp(String isp) {
        this.isp = isp;
    }

    public BigDecimal getKarma() {
        return karma;
    }

    public void setKarma(BigDecimal karma) {
        this.karma = karma;
    }

    public Integer getInviteSlot() {
        return inviteSlot;
    }

    public void setInviteSlot(Integer inviteSlot) {
        this.inviteSlot = inviteSlot;
    }

    public Long getSeedingTime() {
        return seedingTime;
    }

    public void setSeedingTime(Long seedingTime) {
        this.seedingTime = seedingTime;
    }

    public String getPersonalAccessToken() {
        return personalAccessToken;
    }

    public void setPersonalAccessToken(String personalAccessToken) {
        this.personalAccessToken = personalAccessToken;
    }

    public String getPrivacyLevel() {
        return privacyLevel;
    }

    public void setPrivacyLevel(String privacyLevel) {
        this.privacyLevel = privacyLevel;
    }

    public Long getGroupId() {
        return groupId;
    }

    public void setGroupId(Long groupId) {
        this.groupId = groupId;
    }

    @Override
    public String toString() {
        return "User{" +
        "id = " + id +
        ", email = " + email +
        ", password = " + password +
        ", username = " + username +
        ", passkey = " + passkey +
        ", createTime = " + createTime +
        ", avatar = " + avatar +
        ", customTitle = " + customTitle +
        ", signature = " + signature +
        ", language = " + language +
        ", downloadBandwidth = " + downloadBandwidth +
        ", uploadBandwidth = " + uploadBandwidth +
        ", downloaded = " + downloaded +
        ", uploaded = " + uploaded +
        ", realDownloaded = " + realDownloaded +
        ", realUploaded = " + realUploaded +
        ", isp = " + isp +
        ", karma = " + karma +
        ", inviteSlot = " + inviteSlot +
        ", seedingTime = " + seedingTime +
        ", personalAccessToken = " + personalAccessToken +
        ", privacyLevel = " + privacyLevel +
        ", groupId = " + groupId +
        "}";
    }
}
